package cn.darkhorse.device.service;

import cn.darkhorse.device.dto.MesRepairInfoDTO;
import cn.darkhorse.device.pojo.MesRepairInfo;
import cn.darkhorse.device.vo.MesAllRepairInfoVO;
import cn.darkhorse.device.vo.MesRepairApplyInfoVO;
import cn.darkhorse.device.vo.MesRepairVO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.AjaxResult;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 * 维修单 服务类
 * </p>
 *
 * @author maoguanjun
 * @since 2022-11-11
 */
public interface MesRepairInfoNewService extends IService<MesRepairInfo> {

    /**
     * 列表
     * @param mesRepairInfoDTO
     * @return
     */
    List<MesRepairApplyInfoVO> listAll(MesRepairInfoDTO mesRepairInfoDTO);


    List<MesAllRepairInfoVO> listAllRepairInfo(MesRepairInfoDTO mesRepairInfoDTO);
    /**
     * 查看
     * @param id
     * @return
     */
    MesRepairApplyInfoVO view(Long id);

    /**
     * 保存
     * @param mesRepairInfo
     * @return
     */
    boolean saveMesRepairInfo(MesRepairInfo mesRepairInfo);

    /**
     * 删除
     * @param ids
     * @return
     */
    boolean delete(List<Long> ids);

    /**
     * 生成报修维修单号
     * @param type
     * @return
     */
    String getApplyCode(Integer type);

    /**
     * 审核
     * @param id 单据ID
     * @param approvalResult 审核结果 0立即维修1驳回
     * @param approvalOpinion 审核意见
     * @param nextUserId 下一审核人
     * @return
     */
    boolean approval(Long id, Integer approvalResult, String approvalOpinion, Long nextUserId,String reason);

    /**
     *派工
     * @param id
     * @param teamName 班组名称
     * @param repairPersons 维修人
     * @param mainRepairers 主修人
     * @return
     */
    boolean dispatch(Long id, String teamName, String repairPersons, Long mainRepairers);

    /**
     * 快速工单
     * @param mesRepairInfo
     * @return
     */
    AjaxResult quickRepair(MesRepairInfo mesRepairInfo);
    /**
     * 开始维修
     * @param id
     * @return
     */
    boolean startRepair(Long id);

    /**
     * 结束维修
     * @param id
     * @return
     */
    boolean endRepair(Long id);

    /**
     * 维修信息更新
     * @param mesRepairVO
     * @return
     */
    boolean repair(MesRepairVO mesRepairVO);

    /**
     * 验证
     * @param mesRepairVO
     * @return
     */
    boolean verify(MesRepairVO mesRepairVO);

    /**
     * 获取设备状态
     * @return
     */
    Map<Integer, Set<Long>> getRepairStatusMap();
}
